Bayesian Target Encoding

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.02
조회수
13
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

Bayesian Target Encoding

개요

베이지안 타겟 인코딩(Bayesian Target Encoding)은 범주형 변수(categorical variable)를 수치형 변수로 변환하는 고급 인코딩 기법 중 하나로, 특히 머신러닝 모델의 성능 향상을 위해 사용된다. 이 기법은 단순한 타겟 인코딩(target encoding)의 주요 단점인 과적합(overfitting)과 데이터 누수(data leakage) 문제를 완화하기 위해 베이지안 통계의 원리를 적용한 방식이다.

기본적인 타겟 인코딩은 각 범주(category)에 대해 해당 범주에 속한 샘플들의 타겟 변수(target variable)의 평균을 계산하여 그 값을 인코딩 값으로 사용한다. 그러나 소수의 샘플만 존재하는 희소 범주(sparse category)의 경우, 평균이 매우 불안정해지고 과적합이 쉽게 발생할 수 있다. 베이지안 타겟 인코딩은 이러한 문제를 해결하기 위해 사전 분포(prior distribution)를 도입하고, 범주의 샘플 수에 따라 사전 정보와 관측 정보의 가중치를 조정함으로써 더 안정적인 인코딩 값을 생성한다.


기본 원리

1. 타겟 인코딩의 한계

전형적인 타겟 인코딩은 다음과 같은 방식으로 작동한다:

  • 범주 A에 속한 샘플들의 타겟 평균 = 0.8 (예: 이진 분류에서 1의 비율)
  • 범주 B에 속한 샘플들의 타겟 평균 = 1.0 (단, 샘플 수가 2개뿐)

이 경우, 범주 B의 인코딩 값은 1.0이지만, 샘플 수가 적어 신뢰도가 낮다. 이는 테스트 데이터에서 일반화되지 못하고 과적합을 유발할 수 있다.

2. 베이지안 접근법

베이지안 타겟 인코딩은 베이즈 정리(Bayes' Theorem)를 기반으로 하며, 다음과 같은 방식으로 작동한다:

  • 사전 분포(Prior): 전체 데이터셋에서 타겟 변수의 평균을 사전 정보로 사용 (예: 전체 평균 타겟 값 = 0.3)
  • 우도(Likelihood): 특정 범주 내에서 관측된 타겟 평균
  • 사후 분포(Posterior): 사전과 우도를 결합하여 얻은 조정된 인코딩 값

수식으로 표현하면 다음과 같다:

\[ \text{Encoded Value} = \frac{n_c \cdot \mu_c + \alpha \cdot \mu_{\text{global}}}{n_c + \alpha} ]

여기서: - ( n_c ): 범주 ( c )의 샘플 수 - ( \mu_c ): 범주 ( c )의 타겟 평균 - ( \mu_{\text{global}} ): 전체 데이터의 타겟 평균 - ( \alpha ): 정규화 하이퍼파라미터 (신뢰도 조절)

이 수식은 샘플 수 ( n_c )가 작을수록 전체 평균 ( \mu_{\text{global}} )에 더 가까운 값을, 샘플 수가 많을수록 관측된 ( \mu_c )에 더 가까운 값을 부여한다.


구현 방식

1. 하이퍼파라미터 설정

  • ( \alpha ): 보통 경험적으로 설정되며, 범주별 샘플 수의 분포를 고려하여 결정한다.
  • 예: ( \alpha = 5 )는 샘플 수가 5개 미만인 경우 전체 평균에 더 가중치를 둔다는 의미.

2. 교차 검증 기반 인코딩

과적합을 방지하기 위해, 인코딩은 반드시 교차 검증(cross-validation) 방식으로 수행되어야 한다.

예를 들어, K-겹 교차 검증을 사용할 경우: 1. 각 폴드(fold)에서 훈련 데이터만을 사용해 범주별 인코딩 값을 계산 2. 검증 데이터에는 해당 폴드에서 계산된 인코딩 값만 적용

이는 데이터 누수를 방지하고, 모델의 일반화 성능을 높인다.

3. 코드 예시 (Python)

import pandas as pd
import numpy as np
from sklearn.model_selection import KFold

def bayesian_target_encoding(train_df, test_df, cat_col, target_col, alpha=5):
    # 전체 데이터의 타겟 평균 (사전)
    global_mean = train_df[target_col].mean()
    
    # K-겹 교차 검증을 사용하여 과적합 방지
    kf = KFold(n_splits=5, shuffle=True, random_state=42)
    train_encoded = train_df[cat_col].copy()
    train_encoded = train_encoded.astype(float)
    
    for train_idx, val_idx in kf.split(train_df):
        X_tr, X_val = train_df.iloc[train_idx], train_df.iloc[val_idx]
        
        # 훈련 데이터 기반 범주별 평균 계산
        temp_map = X_tr.groupby(cat_col)[target_col].agg(['mean', 'count'])
        temp_map['bayesian_mean'] = (temp_map['count'] * temp_map['mean'] + 
                                     alpha * global_mean) / (temp_map['count'] + alpha)
        
        # 검증 데이터에 인코딩 적용
        train_encoded.iloc[val_idx] = train_df.iloc[val_idx][cat_col].map(temp_map['bayesian_mean']).fillna(global_mean)
    
    # 테스트 데이터 인코딩
    temp_map = train_df.groupby(cat_col)[target_col].agg(['mean', 'count'])
    temp_map['bayesian_mean'] = (temp_map['count'] * temp_map['mean'] + 
                                 alpha * global_mean) / (temp_map['count'] + alpha)
    test_encoded = test_df[cat_col].map(temp_map['bayesian_mean']).fillna(global_mean)
    
    return train_encoded, test_encoded


장점과 단점

장점

  • 과적합 감소: 소수의 샘플을 가진 범주에 대해 전체 평균으로 수렴함으로써 과적합을 방지
  • 안정성 향상: 인코딩 값이 더 신뢰할 수 있고 일반화 가능
  • 모델 성능 향상: 특히 고차원 범주형 변수가 많은 데이터셋에서 성능 개선 효과

단점

  • 계산 복잡성 증가: 교차 검증 기반 인코딩은 계산 비용이 높음
  • 하이퍼파라미터 조정 필요: ( \alpha ) 값은 데이터에 따라 최적화 필요
  • 정보 손실 가능성: 지나치게 보수적인 인코딩은 실제 신호를 희석시킬 수 있음

활용 사례


관련 기법

기법 설명
Target Encoding (Mean Encoding) 범주별 타겟 평균을 직접 사용. 과적합 위험 있음
Leave-One-Out Encoding 각 샘플을 제외한 나머지 데이터의 평균 사용. 데이터 누수 방지
James-Stein Estimator 다변량 정규 분포 가정 하의 수축 추정량. 베이지안과 유사한 철학
CatBoost Encoding CatBoost에서 사용하는 자동 타겟 인코딩 방식. 순차적 처리 기반

참고 자료


베이지안 타겟 인코딩은 고차원 범주형 변수를 효과적으로 처리할 수 있는 강력한 기법으로, 적절한 구현과 하이퍼파라미터 튜닝을 통해 머신러닝 파이프라인의 성능을 크게 향상시킬 수 있다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?